import * as fs from 'fs';
import * as path from 'path';

/**
 * 文件操作工具函数
 */

/**
 * 删除目录
 * @param dirPath 目录路径
 */
export function deleteDirectory(dirPath: string): void {
    if (!fs.existsSync(dirPath)) {
        console.log(`目录不存在: ${dirPath}`);
        return;
    }

    try {
        console.log(`正在删除目录: ${dirPath}`);
        fs.rmSync(dirPath, { recursive: true, force: true });
        console.log(`✅ 目录删除成功: ${dirPath}`);
    } catch (error) {
        console.error(`删除目录失败: ${dirPath}`, error instanceof Error ? error.message : String(error));
    }
}

/**
 * 删除单个文件
 * @param filePath 文件路径
 */
export function deleteFile(filePath: string): void {
    if (!fs.existsSync(filePath)) {
        console.log(`文件不存在: ${filePath}`);
        return;
    }

    try {
        console.log(`正在删除文件: ${filePath}`);
        fs.unlinkSync(filePath);
        console.log(`✅ 文件删除成功: ${filePath}`);
    } catch (error) {
        console.error(`删除文件失败: ${filePath}`, error instanceof Error ? error.message : String(error));
    }
}

/**
 * 读取加密文件
 * @param fileName 文件名，默认为 'encrypted.txt'
 * @returns 文件内容
 */
export function readEncryptedFile(fileName: string = 'encrypted.txt'): string {
    const filePath = path.join(process.cwd(), fileName);

    if (!fs.existsSync(filePath)) {
        throw new Error(`未找到 ${fileName} 文件`);
    }

    try {
        return fs.readFileSync(filePath, 'utf-8');
    } catch (error) {
        throw new Error(`读取文件失败: ${error instanceof Error ? error.message : String(error)}`);
    }
}

/**
 * 检查文件是否存在
 * @param filePath 文件路径
 * @returns 文件是否存在
 */
export function fileExists(filePath: string): boolean {
    return fs.existsSync(filePath);
}

/**
 * 安全读取文件
 * @param filePath 文件路径
 * @param encoding 编码格式，默认为 'utf-8'
 * @returns 文件内容或 null
 */
export function safeReadFile(filePath: string, encoding: BufferEncoding = 'utf-8'): string | null {
    try {
        if (!fs.existsSync(filePath)) {
            return null;
        }
        return fs.readFileSync(filePath, encoding);
    } catch (error) {
        console.error(`读取文件失败: ${filePath}`, error instanceof Error ? error.message : String(error));
        return null;
    }
} 